// Door Slide
// MLing
float constOpenTimer = .1;
float constCloseTimer = .1;
float constTimeAjar = 5.0;
float TimerIs = 0.0;
vector Sze;
vector Pos;
rotation Rot;
integer IsRoot;
vector Uni;
//-----------------------------------------------------------------
Say(string data)
{
    llOwnerSay( data );
}
// ---------------------------------------------------
OpenClose( float way)
{
    float width = Sze.x * (1.0 - way);
    list rules = [
        PRIM_SIZE,<width, Sze.y, Sze.z>,
        PRIM_POSITION, Pos  + <  (width - Sze.x)/2, 0,0 > * Rot ];
    llSetPrimitiveParams( rules );
}
// ---------------------------------------------------
Fill()
{
    Sze = llGetScale( );
    if (llGetLinkNumber() > 1)
        Pos = llGetLocalPos();
    else
        Pos = llGetPos();
    
    Rot = llGetRot();
    if (llGetLinkNumber() > 1)
        Rot = Rot / llGetRootRotation();

    Uni = <Sze.x/2, 0.0, 0.0>;
}
// ---------------------------------------------------
default
{
    // ---------------------------------------------------
    state_entry()
    {
        IsRoot = llGetLinkNumber() > 1;
        state StateShut;
    }
}
// ---------------------------------------------------
state StateShut
{
    // ---------------------------------------------------
    state_entry()
    {
        state stateShut;
    }
}
// ---------------------------------------------------
state stateShut
{
    // ---------------------------------------------------
    state_entry()
    {
        // stuff
        Fill();

        // Slam shut
        OpenClose( 0.0);
    }
    // ---------------------------------------------------
    on_rez(integer start_param)
    {
        llResetScript();
    }
    // ---------------------------------------------------
    touch_end(integer total_number)
    {
        // stuff
        Sze = llGetScale( );
        Fill();
        state StateOpen;
    }
}
// ---------------------------------------------------
state StateOpen
{
    // ---------------------------------------------------
    state_entry()
    {
        state stateOpen;
    }
}
// ---------------------------------------------------
state stateOpen
{
    // ---------------------------------------------------
    state_entry()
    {
        llSetTimerEvent( constOpenTimer);
        TimerIs = 0.0;
    }
    // ---------------------------------------------------
    state_exit()
    {
        llSetTimerEvent( 0.0 );
        TimerIs = 0.0;
    }
    // ---------------------------------------------------
    on_rez(integer start_param)
    {
        llResetScript();
    }
    // ---------------------------------------------------
    timer()
    {
        TimerIs += constOpenTimer;
        OpenClose( TimerIs );

        if(TimerIs >= 1.0)
            state StateAjar;
    }
}
// ---------------------------------------------------
state StateAjar
{
    // ---------------------------------------------------
    state_entry()
    {
        state stateAjar;
    }
}
// ---------------------------------------------------
state stateAjar
{
    // ---------------------------------------------------
    state_entry()
    {
        llSetTimerEvent( constTimeAjar );
    }
    // ---------------------------------------------------
    state_exit()
    {
        llSetTimerEvent( 0.0 );
    }
    // ---------------------------------------------------
    on_rez(integer start_param)
    {
        llResetScript();
    }
    // ---------------------------------------------------
    timer()
    {
        state StateClose;
    }
}
// ---------------------------------------------------
state StateClose
{
    // ---------------------------------------------------
    state_entry()
    {
        state stateClose;
    }
}
// ---------------------------------------------------
state stateClose
{
    // ---------------------------------------------------
    state_entry()
    {
        llSetTimerEvent( constCloseTimer );
        TimerIs = 1.0;
    }
    // ---------------------------------------------------
    state_exit()
    {
        llSetTimerEvent( 0.0 );
    }
    // ---------------------------------------------------
    on_rez(integer start_param)
    {
        llResetScript();
    }
    // ---------------------------------------------------
    timer()
    {
        TimerIs -= constCloseTimer;
        OpenClose( TimerIs );

        if(TimerIs <= 0.0)
            state StateShut;
    }
}
